/*
 * InfoTerminoIndexado.cpp
 *
 *  Created on: 22/11/2011
 *      Author: Ariel
 */

#include "InfoTerminoIndexado.h"

InfoTerminoIndexado::InfoTerminoIndexado() {
	this->IdTermino = IdTermino;
	this->cantDocs = 0;
	this->frecuencias_por_IdDocs = new Lista<Frecuencia_por_IdDoc*>(); //luego poner un comparador para que ingrese de manera ordenada
}

InfoTerminoIndexado::InfoTerminoIndexado(tIdTermino IdTermino, tEnt IdDoc) {
	this->IdTermino = IdTermino;
	this->cantDocs = 1;
	this->frecuencias_por_IdDocs = new Lista<Frecuencia_por_IdDoc*>(); //luego poner un comparador para que ingrese de manera ordenada

	Frecuencia_por_IdDoc* frec_IdDoc = new Frecuencia_por_IdDoc(IdDoc);
	//realizo la primera actualizacion de la lista
	this->frecuencias_por_IdDocs->agregar(frec_IdDoc);
}

void InfoTerminoIndexado::actualizar(tIdDoc IdDoc){
	bool crear_Frec_por_IdDoc = true;
	IteradorLista<Frecuencia_por_IdDoc*> itFrec_IdDoc = this->getFrecuencias_por_IdDoc()->iterador();
	bool salir = false;
	while (itFrec_IdDoc.tieneSiguiente() && !salir){
		Frecuencia_por_IdDoc* fre_IdDoc_actual = itFrec_IdDoc.siguiente();
		tIdDoc idDoc_actual = fre_IdDoc_actual->getIdDoc();
		if ( idDoc_actual == IdDoc){
			fre_IdDoc_actual->incFrecuencia_enUno();
			crear_Frec_por_IdDoc = false;
			salir = true;
		}
	}
	if (crear_Frec_por_IdDoc){
		Frecuencia_por_IdDoc* frec_por_IdDoc_creada = new Frecuencia_por_IdDoc(IdDoc);
		this->getFrecuencias_por_IdDoc()->agregar(frec_por_IdDoc_creada);
		this->incrementarEnUno_cantDocs();
	}
}

void InfoTerminoIndexado::imprimirDatos(){
	cout<<this->IdTermino<<" ";
	cout<<this->cantDocs<<" ";
	IteradorLista<Frecuencia_por_IdDoc*> it = this->getFrecuencias_por_IdDoc()->iterador();
	while (it.tieneSiguiente()){
		Frecuencia_por_IdDoc* frec_por_IdDoc_actual = it.siguiente();
		frec_por_IdDoc_actual->imprimirDatos();
		cout<<" ";
	}
	cout<<endl;
}

tIdTermino InfoTerminoIndexado::getIdTermino() const{
	return this->IdTermino;
}

tEnt InfoTerminoIndexado::getCantDocs() const{
	return this->cantDocs;
}

Lista<Frecuencia_por_IdDoc*>* InfoTerminoIndexado::getFrecuencias_por_IdDoc() const{
	return this->frecuencias_por_IdDocs;
}

void InfoTerminoIndexado::incrementarEnUno_cantDocs(){
		this->cantDocs++;
}

InfoTerminoIndexado& InfoTerminoIndexado::operator=(const InfoTerminoIndexado& unInfoTermino){
	this->IdTermino = unInfoTermino.getIdTermino();
	this->cantDocs = unInfoTermino.getCantDocs();
	this->frecuencias_por_IdDocs = unInfoTermino.getFrecuencias_por_IdDoc();
	return (*this);
}

InfoTerminoIndexado::~InfoTerminoIndexado() {
	delete this->frecuencias_por_IdDocs;
}
